<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>

    <h1>hiao a</h1>
    <a href="">ni</a>
    <script>
      // let a = 2; // 这个会被放在全局scope中，通过this,window是不能够被访问的
      // var b = 1;
      // console.log(window.b, this.b);

      // console.log("是谁先执行", c);
      // c(2, 4);

      // function c() {
      //   console.log(this.a);
      // }
      // var c = 1;

      // function c(x, y) {
      //   console.dir(c);
      //   console.log(x, y);
      // }

      //  var blockFunc = 1
      //   if (true) {
      //     var block = 11111; // var 的声明是不是块级作用域, 是，但是他会被提升到全局作用域
      //     function blockFunc() {  // 为什么这里的函数还是指向window 和 this？做了兼容
      //       console.log("我是{}中函数的声明");  // 当他和全局对象链接的时候只会，其实是var了一个 blockFunc
      //     }
      //   }

      //   console.log("我是block", block, this.block, window.block);
      //   console.log(
      //     "我是func",
      //     this.blockFunc,
      //     blockFunc,
      //     window.blockFunc
      //   );
      // console.log("cdc", this.c, window.c);
      // c(1,2)

      // 解释函数执行上下文
      // function h(){
      //    console.log("hello");
      // }

      // function a() {
      //   b()

      //   function b(){
      //     console.log(h);
      //   }

      //   function c(){
      //     console.log(b);
      //   }
      // }

      // a()

      // 一个简单的闭包
      // function a() {
      //   var b = 1
      //   function c() {
      //     console.log(b)
      //   }
      //   return c
      // }
      // a()

      // for 循环机制,

      // for (let i = 0; i < 5; i++) {
      //   // let i = 100  // 如果这样会打印出5个100
      //   i = 100 // 如果这样他只会打印一个100，他会先查找自己的文本环境，发现没有i的声明，他会沿着他指向的环境查找
      //   setTimeout(()=>{
      //     console.log(i);
      //   },0)
      // }

      // function bar (){
      //   console.log(this);

      // }
      // // console.dir(bar)

      // let a = {
      //   b: 1,
      //   bar
      // }

      // // console.log(a.bar())
      // a.bar()

      // 面试题
      // Object.prototype.a = function () {
      //   console.log("a");
      // };

      // Function.prototype.b = function () {
      //   console.log("b");
      // };

      // var F = function () { }
      // var f = new F()
      // console.log(f);
      // f.a() // a
      // console.log(f.b); // 找不到会返回一个undefined

      // // f.b() // 这个会报错，f.undefinde()
      // F.a() // a
      // F.b() // b
      // console.dir(F);
      // console.log(F.__proto__ === Function.prototype);
      // console.log(Function.prototype.__proto__ === Object.prototype);
      // console.dir(Function.__proto__ === Function.prototype);
      // console.log(Object.prototype.__proto__ === null);
      // console.log(Object.__proto__ === Function.prototype);

      // var a = 666
      // fn()
      // function fn (){
      //   var b = 777
      //   console.log(a); // undefined
      //   console.log(b); // 777
      //   console.log(c); // undefined
      //   var a = 888
      //   var c = 999
      // }

      // a = 666

      // console.log(a);
      // console.log(window);

      // function fn(a){
      //   console.log(a);

      //   var a = 777
      //   function a (){

      //   }
      // }

      // fn(100)

      // function a(){

      // }
      // console.dir(a);

      // var arr = [11,22]
      // function fn(arr){
      //   arr[0] = 100
      //   arr = [666]
      //   arr[0] = 0
      //   console.log(arr); // [0]

      // }
      // fn(arr)
      // console.log(arr); // [100 , 22]
      // console.dir(new Array());
      // console.log(arr.__proto__ === Array.prototype);
      // console.log(Array.__proto__ === Function.prototype);

      const obj = new Object();
      Object.prototype.a = { b: 3}

      obj.a.b = {
        a: 1
      }

      console.log('🚀 ~ This is a result of console.log ~ ✨: ', obj);

      // var res = 5

      function fun() {
        var res = 3
      }

      // let i = 1
      
      // if (true) {
      //   let i = 2
      // }

      // console.log('🚀 ~ This is a result of console.log ~ ✨: ', i);

      // if (true) {
      //   function i() {
      //     console.log('🚀 ~ This is a result of i ~ ✨: ', i);
      //   }
      // }

      // console.log('🚀 ~ This is a result of console.log ~ ✨: ', i);

      // if (false) {
      //   var bbc = 'fake news'
      // }

      // console.log('🚀 ~ This is a result of console.log ~ ✨bbc: ', bbc); // undefined

      console.log('🚀 ~ This is a result of console.log ~ ✨: is s', i)

      for (var i = 1; i < 10; i++) {
        console.log('🚀 ~ This is a result of console.log ~ ✨: ', i);
      }

      if (true) {
        var a = 23
      }
    </script>
  </body>
</html>
